package com.fast.alden.data.model;

import com.fast.alden.data.aspect.BaseEntityAuditingListener;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 实体基类，声明实体类型共有属性
 */
@Getter
@Setter
@MappedSuperclass
@EntityListeners({AuditingEntityListener.class, BaseEntityAuditingListener.class})
public abstract class BaseEntity implements Serializable {
    /**
     * ID，唯一标识，使用主键自增策略
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 创建时间
     */
    @Column
    @CreatedDate
    private LocalDateTime createdTime;

    /**
     * 最后修改时间
     */
    @Column
    @LastModifiedDate
    private LocalDateTime lastModifiedTime;

    /**
     * 创建人ID
     */
    @CreatedBy
    private Long creatorId;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 创建人类型，0-后台用户，1-前台用户
     */
    private Integer creatorType;

    /**
     * 最后修改人ID
     */
    @LastModifiedBy
    private Long lastModifierId;

    /**
     * 最后修改人
     */
    private String lastModifierName;

    /**
     * 最后修改人类型，0-后台用户，1-前台用户
     */
    private Integer lastModifierType;
}
